import { defineStore } from 'pinia';
import { postlogin, getusers } from '@/api'
// 模拟获取角色信息的接口函数，实际使用时替换为真实接口
const fetchRoleInfo = async () => {
  // 这里应该是实际的 API 调用，例如：
  // return axios.get('/api/role-info');
  return {
    roles: ['admin'],
    permissions: ['create', 'read', 'update', 'delete']
  };
};

export const useUserStore = defineStore('user', {
  state: () => ({
    // 用户信息状态
    userInfo: JSON.parse(localStorage.getItem('sf_user_info')) || null,
    token: localStorage.getItem('sf_token') || null,
    // 角色信息
    roleInfo: null
  }),
  getters: {
    // 获取用户信息
    getUserInfo: (state) => state.userInfo,
    // 获取 token
    getToken: (state) => state.token,
    // 获取角色信息
    getRoleInfo: (state) => state.roleInfo,
    // 获取角色列表
    getRoles: (state) => state.roleInfo?.roles || [],
    // 获取权限列表
    getPermissions: (state) => state.roleInfo?.permissions || []
  },
  actions: {
    // 设置用户信息
    setUserInfo(userInfo) {
      this.userInfo = userInfo;
      // 将用户信息存储到本地
      localStorage.setItem('sf_user_info', JSON.stringify(userInfo));
    },
    // 设置 token
    setToken(token) {
      this.token = token;
      localStorage.setItem('sf_token', token);
    },
    // 清除用户信息和 token
    clearUserInfo() {
      this.userInfo = null;
      this.token = null;
      this.roleInfo = null;
      // 从本地存储中删除用户信息和 token
      localStorage.removeItem('sf_token');
      localStorage.removeItem('sf_user_info');
    },
    // 通过接口获取角色信息并存储
    async fetchAndSetRoleInfo() {
      try {
        const response = await getusers();
        this.roleInfo = response.data;
      } catch (error) {
        console.error('获取角色信息失败:', error);
        this.roleInfo = null;
      }
    },
    // 判断是否拥有指定角色
    hasRole(role) {
      return this.getRoles.includes(role);
    },
    // 判断是否拥有指定权限
    hasPermission(permission) {
      return this.getPermissions.includes(permission);
    }
  }
});
